package com.erp.erp_dao.money;

import com.erp.erp_entitys.money.entity.PaymentEntity;
import com.erp.erp_entitys.money.req.ImportCarryDetailInfoReq;
import com.erp.erp_entitys.money.req.ImportPurchaseInfoReq;
import com.erp.erp_entitys.money.req.PaymentPageListReq;
import com.erp.erp_entitys.money.rsp.*;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 资金管理-付款表(Payment)表数据库访问层
 *
 * @author lst
 * @since 2020-12-28 15:58:46
 */
public interface IPaymentDao {

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    PaymentEntity queryById(Integer id);



    /**
     * 通过实体作为筛选条件查询
     *
     * @param payment 实例对象
     * @return 对象列表
     */
    List<PaymentEntity> queryAll(PaymentEntity payment);

    /**
     * 新增数据
     *
     * @param payment 实例对象
     * @return 影响行数
     */
    int insert(PaymentEntity payment);

    /**
     * 修改数据
     *
     * @param payment 实例对象
     * @return 影响行数
     */
    int update(PaymentEntity payment);

    /**
     * 获取付款信息
     * @param ids 付款id
     * @return 付款信息
     */
    List<PaymentEntity> getRefundInfo(@Param("ids") List<String> ids);

    /**
     * 获取分页列表
     * @param req 实例对象
     * @return  分页列表
     */
    List<PaymentPageListRsp> getPaymentPageListInfo(PaymentPageListReq req);


    /**
     * 获取采购信息
     * @param req 查询条件
     * @return 采购集合
     */
    List<ImportPurchaseRsp> getImportPurchaseInfo(ImportPurchaseInfoReq req);

    /**
     * 获取采购样品信息
     * @param req 查询条件
     * @return 采购集合
     */
    List<ImportPurchaseRsp> getImportPurchaseSampleInfo(ImportPurchaseInfoReq req);

    /**
     * 获取出运明细信息
     * @param req 查询条件
     * @return 出运明细信息
     */
    List<ImportCarryDetailInfoRsp> getImportCarryDetailInfo(ImportCarryDetailInfoReq req);


    /**
     * getCountByCarryDetailBillNoOrProductId
     * @param billNo 出运明细单号
     * @param productId 出运明细产品id
     * @return 已做付款数量
     */
    int getCountByCarryDetailBillNoOrProductId(@Param("billNo") String billNo, @Param("productId") Integer productId);



    //*****************************************银行信息************************************************************
    /**
     * 获取银行信息
     * @param code 供应商编码
     * @return 银行信息
     */
    List<BankInfoRsp> getBankInfo(@Param("code") String code);



    //*****************************************供应商信息************************************************************
    /**
     * 获取供应商信息
     * @return 供应商信息
     */
    List<SupplierInfoRsp> getSupplierInfo();

}